﻿using System;
using System.Collections.ObjectModel;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Windows.Forms;
using System.Text;

namespace Cataloger
{
    public class KatalogiEventArgs : EventArgs
    {
        public KatalogiEventArgs(Katalog k)
        {
            this.kat = k;
        }
        public Katalog kat
        {
            get;
            set;
        }
    }

    public class Katalogi:KeyedCollection<string,Katalog>
    {
        public event EventHandler<KatalogiEventArgs> DodanoKatalog;
        public event EventHandler<KatalogiEventArgs> UsnietoKatalog;
        new public void Add(Katalog kat)
        {
            if (!this.Contains(kat.Nazwa))
            {
                this.Items.Add(kat);
                if (DodanoKatalog != null)
                {
                    DodanoKatalog(this,new KatalogiEventArgs(kat));
                }
                
            }

        }
        new public void Remove(Katalog kat)
        {
            if (this.Contains(kat))
            {
                this.Items.Remove(kat);
                if (UsnietoKatalog!= null)
                {
                    UsnietoKatalog(this, new KatalogiEventArgs(kat));
                }

            }
            
        }
        new public void Clear()
        {
            while (this.Items.Count > 0)
            {
                this.Remove(this.Items[this.Items.Count-1]);
            }
        }
        
        protected override void InsertItem(int index, Katalog item)
        {
            base.InsertItem(index, item);
        }
        protected override string GetKeyForItem(Katalog item)
        {
            return item.Nazwa;
        }
        public long LiczbaKatalogow
        {
            get
            {
                return this.Count;
            }
        }
        public long LiczbaNosnikow
        {
            get
            {
                long suma = 0;
                foreach (Katalog kat in this)
                {
                    suma += kat.LiczbaNosnikow;
                }
                return suma;
            }
        }
        public long LiczbaFolderow
        {
            get
            {
                long suma = 0;
                foreach (Katalog kat in this)
                {
                    suma += kat.IleFolderow;
                }
                return suma;
            }
        }
        public long LiczbaPlikow
        {
            get
            {
                long suma = 0;
                foreach (Katalog kat in this)
                {
                    suma += kat.IlePlikow;
                }
                return suma;
            }
        }
        public long RozmiarDanych
        {
            get
            {
                long suma = 0;
                foreach (Katalog kat in this)
                {
                    suma += kat.RozmiarDanych;
                }
                return suma;
            }
        }
        public string CalkowiteInfo
        {
            get
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Liczba katalogów: "+LiczbaKatalogow.ToString());
                sb.AppendLine("Liczba nośników: "+LiczbaNosnikow.ToString());
                sb.AppendLine("Liczba folderów: " + LiczbaFolderow.ToString("N0"));
                sb.AppendLine("Liczba plików: " + LiczbaPlikow.ToString("N0"));
                sb.AppendLine("Rozmiar danych: "+RozmiarDanych.ToProperUnit());
                return sb.ToString();
            }
        }



    }

}
